aabb变bbaa
<script type="text/javascript">
	var reg = /(\w)\1(\w)\2/g;
	var str = "aabb";
	console.log(str.replace(reg,"$2$2$1$1")); //$1代表第一个引用 \1
	str.replace(reg,function($,$1,$2){//系统调用系统传参；第一个参数，正则表达式匹配的接过，第二个参数是第一个子表达式匹配的内容，第三个参数是第二个子表达式匹配的内容
		return $2 + $2 + $1 + $1;
	})
</script>

//the-first-name变theFirstName
<script type="text/javascript">
	var reg = /-(\w)/g;
	var str = "the-first-name";
	console.log(str.replace(reg,"$1"))
	console.log(str.replace(reg,function($,$1){
		return $1.toUpperCase()
	}));
</script>

正向预查，正向断言
<script type="text/javascript">
	var str = "abaaa";
	var reg = /a(?=b)/g;//a后面跟的是b，但是b不参与选择，b只是修饰
	console.log(str.match(reg));
	var reg1 = /a(?!b)/g;//a后面跟的不是b的那个a
</script>

非贪婪匹配，能少别多
<script type="text/javascript">
	var str = "aaaaa";
	var reg = /a{1,3}?/g;//打破贪婪匹配，加问号
	console.log(str.match(reg));
	var reg = /a??/g;//第一个？是变量，第二个能取0不取1
	var reg = /a*?/g;//能取0不取1
	var reg = / /g;//匹配空格
</script>

匹配反向斜杠\,?* 特殊符号加？
<script type="text/javascript">
	var str = "aa\\aaa";
	var reg = /\\/g;
	console.log(str.match(reg));
</script>

去重
<script type="text/javascript">
	var str = "aaabbbbcccc";
	//拿一个替换一串，先匹配一串，
	var reg = /(\w)\1*/g;//反向引用一个或多个
	console.log(str.replace(reg,"$1"));
</script>

给10000000000转变成10.000.000.000
<script type="text/javascript">
	var str = "10000000000";
	var reg = /($)/g; //$,以空结尾，从后往前查，三数一组
	var reg = /((\d{3})+$)/g;//   (\d{3})  多个三数，3的倍数个数字
	var reg = /(？=(\d{3})+$)/g;//	 正向预查，空后面是(\d{3})+$，
	var reg = /(？=(\B)(\d{3})+$)/g;//非单词边界
	
	console.log(str.replace(reg,"."));
</script>